﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.Models.LinQ.DanhMuc;
using Webdiyer.WebControls.Mvc;
using DTTB.Common;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.Models.FormBean.DanhMuc;

namespace DTTB.MV2.QUANLYNHANSUTIENLUONG.BussinessDelegate.DanhMucDelegate
{
    public class TienBoiDuongDelegate
    {
        DBDanhMucDataContext DBDanhMuc = new DBDanhMucDataContext();

        public IList<dm_TienBoiDuong> GetAllTienBoiDuong()
        {
            return DBDanhMuc.dm_TienBoiDuongs.Where(p => p.IsDelete == false).ToList();
        }
        public dm_TienBoiDuong AddNewTienBoiDuong(dm_TienBoiDuong TienBoiDuong)
        {
            DBDanhMuc.dm_TienBoiDuongs.InsertOnSubmit(TienBoiDuong);

            DBDanhMuc.SubmitChanges();

            return GetLoaiCongChucIdMax();
        }

        public void DeleteTienBoiDuong(int TienBoiDuongID)
        {
            dm_TienBoiDuong TienBoiDuongNew =
                DBDanhMuc.dm_TienBoiDuongs.Single(p => p.Id == TienBoiDuongID);
            //LoaiCongChuc.Id = LoaiCongChuc.Id;

            DBDanhMuc.dm_TienBoiDuongs.DeleteOnSubmit(TienBoiDuongNew);
            DBDanhMuc.SubmitChanges();
        }
        public int DeleteTienBoiDuong(dm_TienBoiDuong TienBoiDuong)
        {
            try
            {
                dm_TienBoiDuong TienBoiDuongDelete =
                    DBDanhMuc.dm_TienBoiDuongs.Single(p => p.Id == TienBoiDuong.Id);
                TienBoiDuongDelete.Id = TienBoiDuong.Id;
                TienBoiDuongDelete.UpdateDate = DateTime.Now;
                TienBoiDuongDelete.UpdateBy = Convert.ToInt32(HttpContext.Current.Session["USERID"]);
                TienBoiDuongDelete.IsDelete = true;
                DBDanhMuc.SubmitChanges();
                return 1;
            }
            catch (Exception)
            { return 0; }
            
        }
        public void UpdateTienBoiDuong(dm_TienBoiDuong TienBoiDuong)
        {
            dm_TienBoiDuong TienBoiDuongUpdate =
                DBDanhMuc.dm_TienBoiDuongs.Single(p => p.Id == TienBoiDuong.Id);

            TienBoiDuongUpdate.Id = TienBoiDuong.Id;
            TienBoiDuongUpdate.IdBuoi = TienBoiDuong.IdBuoi;
            TienBoiDuongUpdate.IdSoKm = TienBoiDuong.IdSoKm;
            TienBoiDuongUpdate.SoTien = TienBoiDuong.SoTien;
            TienBoiDuongUpdate.UpdateDate = TienBoiDuongUpdate.UpdateDate;
            TienBoiDuongUpdate.UpdateBy = TienBoiDuongUpdate.UpdateBy;
            DBDanhMuc.SubmitChanges();
        }

        public PagedList<dm_TienBoiDuong> SearchTienBoiDuongPagedList(int? id, string searchCriteria)// id = page Index
        {
            return (PagedList<dm_TienBoiDuong>)DBDanhMuc.dm_TienBoiDuongs.Where(p => p.SoTien ==Convert.ToDecimal(searchCriteria) && p.IsDelete == false).ToPagedList(id ?? 1, CommonVariables.PaggedItemsPerPage);


        }

        public dm_TienBoiDuong GetTienBoiDuongById(string id)
        {
            try
            {
                dm_TienBoiDuong item = this.DBDanhMuc.dm_TienBoiDuongs.Single(p => p.Id == Convert.ToInt32(id));
                return item;
            }
            catch (Exception)
            {
                return null;
            }
        }
        
        public PagedList<dm_TienBoiDuong> RecycleGetTienBoiDuongPagedList(int? id)// id = page Index
        {
            return DBDanhMuc.dm_TienBoiDuongs.Where(p => p.IsDelete == true).OrderByDescending(p => p.Id).ToPagedList(id ?? 1, CommonVariables.PaggedItemsPerPage);
        }
        public PagedList<dm_TienBoiDuong> GetTienBoiDuongPagedList(int? id)// id = page Index
        {
            return DBDanhMuc.dm_TienBoiDuongs.Where(p => p.IsDelete == false).OrderByDescending(p => p.Id).ToPagedList(id ?? 1, CommonVariables.PaggedItemsPerPage);
        }

        public dm_TienBoiDuong BuildNewTienBoiDuong(TienBoiDuongForm form)
        {
            dm_TienBoiDuong newTienBoiDuong = new dm_TienBoiDuong();
            newTienBoiDuong.IdBuoi = form.IdBuoi;
            newTienBoiDuong.IdSoKm = form.IdSoKm;
            if(!string.IsNullOrEmpty(form.SoTien))
                newTienBoiDuong.SoTien = Convert.ToDecimal(form.SoTien.Replace(".",""));
            newTienBoiDuong.CreateBy = Convert.ToInt32(HttpContext.Current.Session["USERID"]);
            newTienBoiDuong.CreateDate = DateTime.Now;
            newTienBoiDuong.IsDelete = false;
            return newTienBoiDuong;
        }
        
        public dm_TienBoiDuong BuildEditTienBoiDuong(TienBoiDuongForm form)
        {
            dm_TienBoiDuong UpdateTienBoiDuong = new dm_TienBoiDuong();
            UpdateTienBoiDuong.Id = form.Id;
            UpdateTienBoiDuong.IdBuoi = form.IdBuoi;
            UpdateTienBoiDuong.IdSoKm = form.IdSoKm;
            if (!string.IsNullOrEmpty(form.SoTien))
                UpdateTienBoiDuong.SoTien = Convert.ToDecimal(form.SoTien.Replace(".", ""));
            UpdateTienBoiDuong.UpdateDate = DateTime.Now;
            UpdateTienBoiDuong.UpdateBy = Convert.ToInt32(HttpContext.Current.Session["USERID"]);
            return UpdateTienBoiDuong;
        }
        public dm_TienBoiDuong GetLoaiCongChucIdMax()
        {
            IList<dm_TienBoiDuong> list = DBDanhMuc.dm_TienBoiDuongs.ToList();
            return list.Count != 0 ? list.ElementAt(list.Count - 1) : null;
        }
        public TienBoiDuongForm ConvertToForm(dm_TienBoiDuong obj)
        {
            TienBoiDuongForm form = new TienBoiDuongForm();
            form.Id = obj.Id;
            form.IdBuoi = obj.IdBuoi!=null?obj.IdBuoi.Value:0;
            form.IdSoKm = obj.IdSoKm != null ? obj.IdSoKm.Value : 0;
            form.SoTien = obj.SoTien!=null?obj.SoTien.Value.ToString("#,#").Replace(",","."):"";
            form.UpdateDate = obj.UpdateDate != null ? obj.UpdateDate.Value : DateTime.MinValue;
            form.CreateDate = obj.CreateDate != null ? obj.CreateDate.Value : DateTime.MinValue;
            form.UpdateBy = obj.UpdateBy != null ? obj.UpdateBy.Value : 0;
            form.CreateBy = obj.CreateBy != null ? obj.CreateBy.Value : 0;
            return form;
        }

        public decimal GetSoTienBoiDuong(int idBuoi, int IdKm)
        {
            try
            {
                return DBDanhMuc.dm_TienBoiDuongs.Where(p => p.IdBuoi == idBuoi && p.IdSoKm == IdKm && (p.IsDelete == false || p.IsDelete == null)).OrderByDescending(p => p.CreateDate).First().SoTien.Value;
            }
            catch (Exception)
            {
                return 0;
            }
        }
    }
}